package com.nineclock.system.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nineclock.common.constant.NcConstant;
import com.nineclock.common.enums.ResponseEnum;
import com.nineclock.common.exception.NcException;
import com.nineclock.common.utils.BeanHelper;
import com.nineclock.system.dto.SysCompanyContactConfigDTO;
import com.nineclock.system.mapper.SysCompanyContactConfigMapper;
import com.nineclock.system.pojo.SysCompany;
import com.nineclock.system.pojo.SysCompanyContactConfig;
import com.nineclock.system.service.SysCompanyContactConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
@Slf4j
public class SysCompanyContactConfigServiceImpl implements SysCompanyContactConfigService {
    @Autowired
    SysCompanyContactConfigMapper sysCompanyContactConfigMapper;
    @Override
    public void addCompanyContactConfig(SysCompanyContactConfigDTO companyContactConfigDTO) {

        //健壮性的判断
        if (companyContactConfigDTO == null || companyContactConfigDTO.getName() == null){
            throw new NcException(ResponseEnum.INVALID_PARAM_ERROR);

        }






        Long companyId = 1L;



        //把DTO对象中的属性值赋值到pojo中
        SysCompanyContactConfig companyContactConfig = BeanHelper.copyProperties(companyContactConfigDTO, SysCompanyContactConfig.class);
        //给其他属性赋值
        companyContactConfig.setStatus((short)1);
        companyContactConfig.setFieldType("string");
        //假设一个企业的id
        companyContactConfig.setCompanyId(companyId);

        //保存到数据库中
        sysCompanyContactConfigMapper.insert(companyContactConfig);

    }
/*查询并初始化
* 1.查询该企业下的企业通讯录字段,
* 2.如果没有,初始化默认字段,
* 3.如果有,直接查询并返回,
* */
    @Override
    public List<SysCompanyContactConfigDTO> queryCompanyContactConfig() {
        //假设企业id为1
        Long companyId = 1L;
        //查询该企业下的 通讯录字段
        LambdaQueryWrapper<SysCompanyContactConfig> wrapper = new LambdaQueryWrapper<>();
        //配置条件 ,配置那些字段 eq 等于的意思
        wrapper.eq(SysCompanyContactConfig::getCompanyId,companyId);
        //获取通讯录列表
        List<SysCompanyContactConfig> companyContactConfigList = sysCompanyContactConfigMapper.selectList(wrapper);
        //如果是null,则初始化通讯录字段  NcConstant.COMPANY_CONFIG_CONTACT_LIST 包含了部门等字段
        if (CollectionUtil.isEmpty(companyContactConfigList)){
            //创建一个空的集合对象
            companyContactConfigList = new ArrayList<>();

            for (String name : NcConstant.COMPANY_CONFIG_CONTACT_LIST) {
                SysCompanyContactConfig companyContactConfig =new SysCompanyContactConfig();
                companyContactConfig.setName(name);
                companyContactConfig.setCompanyId(companyId);
                companyContactConfig.setFieldType("string");
                companyContactConfig.setType("fixed");
                companyContactConfig.setStatus((short)1);

                //保存数据
                sysCompanyContactConfigMapper.insert(companyContactConfig);
                //添加到集合中
                companyContactConfigList.add(companyContactConfig);
            }
        }
        //把pojo转换为DTO  把得到的pojo list集合 转换成DTO
        List<SysCompanyContactConfigDTO> companyContactConfigDTOList = BeanHelper.copyWithCollection(companyContactConfigList, SysCompanyContactConfigDTO.class);
        //创建pojo



        return companyContactConfigDTOList;
    }

    @Override
    public void updateCompanyContactConfig(Long id, Short status) {

        Long companyId = 1L;
        //健壮性的判断
        if (id==null || status==null){
            throw new NcException(ResponseEnum.INVALID_PARAM_ERROR);
        }
        //根据id查询企业通讯录字段
        SysCompanyContactConfig companyContactConfig = sysCompanyContactConfigMapper.selectById(id);
        if (companyContactConfig !=null){
            companyContactConfig.setStatus(status);
            companyContactConfig.setCompanyId(companyId);
            sysCompanyContactConfigMapper.updateById(companyContactConfig);
        }
    }

    @Override
    public void deleteCompanyContactConfig(Long id) {
        //健壮性的判断
        if (id==null){
            throw new RuntimeException(ResponseEnum.INVALID_PARAM_ERROR.getMessage());
        }
        //根据id删除企业通讯录
         sysCompanyContactConfigMapper.deleteById(id);
    }
}
